]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
global: Initiate *full* GC at idle
authorColin Walters <walters@verbum.org>
Fri, 16 Sep 2011 14:37:59 +0000 (10:37 -0400)
committerColin Walters <walters@verbum.org>
Sat, 17 Sep 2011 14:16:35 +0000 (10:16 -0400)
While I've been trying to make the GC kick in more often, I've decided
it's a better tradeoff to aggressively GC at "leisure", for multiple
reasons.

We can and should revisit this at a later time, but basically:

* The shell doesn't generate *that* much JS data - garbage collection
  is very fast here.
* Long periods without GC mean we're not calling free() when we
  could, which in turn makes heap fragmentation much worse.
* Ensuring the GC runs at idle makes it much less likely we'll take
  a random large GC hit in the middle of an animation.

https://bugzilla.gnome.org/show_bug.cgi?id=659254

src/shell-global.c

index 98b51bec479db6424ac1a7d13ead288e72262634..bf7b5a794ebdd407bbe7e0dbc6a81abf0f702ba0 100644 (file)
@@ -1429,11 +1429,12 @@ run_leisure_functions (gpointer data)
   if (global->work_count > 0)
     return FALSE;
 
-  /*
-   * We do call MAYBE_GC() here to free up some memory and
-   * prevent the GC from running when we are busy doing other things.
+  /* Previously we called gjs_maybe_gc().  However, it simply doesn't
+   * trigger often enough.  Garbage collection is very fast here, so
+   * let's just aggressively GC.  This will help avoid both heap
+   * fragmentation, and the GC kicking in when we don't want it to.
    */
-  shell_global_maybe_gc (global);
+  gjs_context_gc (global->js_context);
 
   /* No leisure closures, so we are done */
   if (global->leisure_closures == NULL)